<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>事件绑定</title>
</head>
<body>
    <div id="root"> </div>

    <script src="../js/react.development.js"></script>
    <script src="../js/react-dom.development.js"></script>
    <script src="../js/babel.min.js"></script>

    <script type="text/babel">
        //声明一个函数    这里代码都开启了严格模式
        // function test(){
        //     console.log('你点击了我');
        //     //this 指向的值
        //     console.log(this);
        // }


        class App extends React.Component{
            //state 设置
            state = {
                isNight: false
            }

            //调整事件回调中 this 的值
            //2. 声明构造方法
            constructor(){
                //在构造方法中, this 是指向实例对象的
                //3. super
                super();
                //4. 修正事件回调 this 的值
                // this.test = 是在给实例对象添加属性
                this.test = this.test.bind(this);
            }

            render(){
                //render 内部的 this 是指向『实例对象』的 
                //解构赋值  
                let {isNight} = this.state;
                return <div>
                        <h2>至尊宝, 我是{isNight ? '青霞' : '紫霞'}</h2>
                        <button onClick={this.test}>点击切换白天与黑夜</button>
                    </div>        
            }

            //类内部的方法  实例对象可以调用该方法
            //1. 类内部声明方法
            test(){
                // console.log(this.state);
                // console.log('你点了我');
                //修改 state 中 isNight 的值   set 设置  state 状态  该方法可以修改 state 属性中的值

                //获取当前 isNight 的值
                let {isNight} = this.state;

                this.setState({
                    isNight: !isNight
                });
            }
        }

        ReactDOM.render(<App />, document.querySelector("#root"));
    </script>
</body>
</html>